package com.jiang.daily.Q1705;

import java.util.PriorityQueue;

/**
 * @author Jiang
 * @version 1.0
 * @date 2024/12/24 17:38
 */
class Solution {
    // 贪心 + 优先队列
    public int eatenApples(int[] apples, int[] days) {
        PriorityQueue<int[]> p = new PriorityQueue<>((a, b) -> a[1] - b[1]);
        int res = 0;
        int i = 1;
        for (; i <= apples.length; i++) {
            if (apples[i - 1] != 0) {
                p.offer(new int[]{apples[i - 1], days[i - 1] + i});
            }
            // 吃最先腐烂的苹果
            while (!p.isEmpty()) {
                int[] t = p.poll();
                if (t[1] > i) { // 如果没有腐烂，就吃
                    t[0]--;
                    res++;
                    if (t[0] > 0 && t[1] > i + 1) { // 如果这次的苹果没吃完，且腐烂日期不在下一天，就再次加入到队列中
                        p.offer(t);
                    }
                    break; // 吃完就退出循环
                }
            }
        }
        while (!p.isEmpty()) {
            int[] t = p.poll();
            if (t[1] > i) {
                t[0]--;
                res++;
                if (t[0] > 0 && t[1] > i + 1) {
                    p.offer(t);
                }
                i++; // 天数要加一
            }
        }
        return res;
    }
}
